package com.grizz.snake.player;

import org.newdawn.slick.Image;
import org.newdawn.slick.geom.Vector2f;

/**
 * Klasa {@link SnakeResource} jest skladowa klasy {@link Snake} zawierajaca wszystkie media potrzebne do wyswietlenia tej jednostki,
 * jak i metody potrzebne do zaladowania tych mediow z zewnatrz.<br><br>
 * 
 * {@link Snake} sklada sie z trzech segmentow - glowy, ciala i ogona. Do ustawienia wygladu kazdego segmentu klasa ta udostepnia
 * odpowiadajaca im metode (setHead/Tail/BodyImage).
 * 
 * @author Grizz
 *
 */
public abstract class SnakeResource {
	public static final Vector2f GO_LEFT = new Vector2f(-1, 0);
	public static final Vector2f GO_RIGHT = new Vector2f(1, 0);
	public static final Vector2f GO_UP = new Vector2f(0, -1);
	public static final Vector2f GO_DOWN = new Vector2f(0, 1);
	public static final Vector2f GO_NOWHERE = new Vector2f(0, 0);
	
	protected Image headUp;
	protected Image headDown;
	protected Image headLeft;
	protected Image headRight;
	
	protected Image body;
	
	protected Image tailUp;
	protected Image tailDown;
	protected Image tailLeft;
	protected Image tailRight;

	/**
	 * Ustawia wyglad glowy weza
	 * @param image - obraz zawierajacy grafike glowy weza
	 * @param direction - kierunek w ktorym ma isc waz by dana grafika byla wyswietlana. Odpowiednie obiekty sa w
	 * klasie {@link SnakeResource} jako pola statyczne.
	 */
	public void setHeadImage(Image image, Vector2f direction) {
		if(direction.equals(GO_DOWN)) 		headDown = image;
		else if(direction.equals(GO_UP)) 	headUp = image;
		else if(direction.equals(GO_LEFT)) 	headLeft = image;
		else if(direction.equals(GO_RIGHT)) headRight = image;
	}

	/**
	 * Ustawia wyglad glowy weza
	 * @param image - obraz zawierajacy grafike glowy weza
	 * @param direction - kierunek w ktorym ma isc waz by dana grafika byla wyswietlana. Odpowiednie obiekty sa w
	 * klasie {@link SnakeResource} jako pola statyczne.
	 */
	public void setTailImage(Image image, Vector2f direction) {
		if(direction.equals(GO_DOWN)) 		tailDown = image;
		else if(direction.equals(GO_UP)) 	tailUp = image;
		else if(direction.equals(GO_LEFT))	tailLeft = image;
		else if(direction.equals(GO_RIGHT)) tailRight = image;
	}

	/**
	 * Ustawia wyglad srodkowiego segmentu calego ciala weza.
	 * @param image - obraz zawierajacy grafike ciala weza. Ta sama grafika jest wyswietlana niezaleznie od kierunku poruszania sie weza
	 */
	public void setBodyImage(Image image) {
		body = image;
	}
}
